[libc++] Drop support for CRTs older than VS 2015 LLVM dropped support for Visual Studio versions older than 2015 quite some time ago, so I consider it safe to drop libc++'s support for older CRTs. The CRT in Visual Studio 2015 provides a lot of previously missing functions, so targeting it requires less special casing. Differential Revision: https://reviews.llvm.org/D31798 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@299743 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/cmath b/include/cmath index 74b4ab8..b41f247 100644 --- a/include/cmath +++ b/include/cmath 
@@ -398,7 +398,6 @@  using ::copysign;  using ::copysignf;   -#if !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14))  using ::erf;  using ::erff;  using ::erfc; @@ -435,12 +434,10 @@  using ::lrintf;  using ::lround;  using ::lroundf; -#endif // !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14))    using ::nan;  using ::nanf;   -#if !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14))  using ::nearbyint;  using ::nearbyintf;  using ::nextafter; @@ -463,7 +460,6 @@  using ::tgammaf;  using ::trunc;  using ::truncf; -#endif // !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14))    using ::acosl;  using ::asinl; @@ -495,7 +491,6 @@    using ::copysignl;   -#if !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14))  using ::erfl;  using ::erfcl;  using ::exp2l; @@ -526,7 +521,6 @@  using ::scalbnl;  using ::tgammal;  using ::truncl; -#endif // !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14))    #if _LIBCPP_STD_VER > 14  inline _LIBCPP_INLINE_VISIBILITY float hypot( float x, float y, float z ) { return sqrt(x*x + y*y + z*z); } 
diff --git a/include/cstdio b/include/cstdio index 35941ce..00b989f 100644 --- a/include/cstdio +++ b/include/cstdio 
@@ -98,9 +98,6 @@    #include <__config>  #include <stdio.h> -#if defined(_LIBCPP_MSVCRT) -#include <crtversion.h> -#endif    #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)  #pragma GCC system_header @@ -156,8 +153,7 @@    #ifndef _LIBCPP_HAS_NO_STDIN  using ::getchar; -#if _LIBCPP_STD_VER <= 11 && \ - (!defined(_VC_CRT_MAJOR_VERSION) || _VC_CRT_MAJOR_VERSION < 14) +#if _LIBCPP_STD_VER <= 11 && !defined(_LIBCPP_MSVCRT)  using ::gets;  #endif  using ::scanf; 
diff --git a/include/math.h b/include/math.h index b765926..79ebf2f 100644 --- a/include/math.h +++ b/include/math.h 
@@ -293,9 +293,6 @@  */    #include <__config> -#if defined(_LIBCPP_MSVCRT) -#include <crtversion.h> -#endif    #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)  #pragma GCC system_header @@ -333,7 +330,7 @@  return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x);  }   -#elif defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) >= 14) +#elif defined(_LIBCPP_MSVCRT)    template <typename _A1>  inline _LIBCPP_INLINE_VISIBILITY @@ -367,7 +364,7 @@  return __libcpp_fpclassify((typename std::__promote<_A1>::type)__lcpp_x);  }   -#elif defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) >= 14) +#elif defined(_LIBCPP_MSVCRT)    template <typename _A1>  inline _LIBCPP_INLINE_VISIBILITY @@ -673,7 +670,7 @@    // acos   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float acos(float __lcpp_x) _NOEXCEPT {return ::acosf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __lcpp_x) _NOEXCEPT {return ::acosl(__lcpp_x);}  #endif @@ -685,7 +682,7 @@    // asin   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float asin(float __lcpp_x) _NOEXCEPT {return ::asinf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __lcpp_x) _NOEXCEPT {return ::asinl(__lcpp_x);}  #endif @@ -697,7 +694,7 @@    // atan   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float atan(float __lcpp_x) _NOEXCEPT {return ::atanf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __lcpp_x) _NOEXCEPT {return ::atanl(__lcpp_x);}  #endif @@ -709,7 +706,7 @@    // atan2   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float atan2(float __lcpp_y, float __lcpp_x) _NOEXCEPT {return ::atan2f(__lcpp_y, __lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __lcpp_y, long double __lcpp_x) _NOEXCEPT {return ::atan2l(__lcpp_y, __lcpp_x);}  #endif @@ -732,7 +729,7 @@    // ceil   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float ceil(float __lcpp_x) _NOEXCEPT {return ::ceilf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __lcpp_x) _NOEXCEPT {return ::ceill(__lcpp_x);}  #endif @@ -744,7 +741,7 @@    // cos   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float cos(float __lcpp_x) _NOEXCEPT {return ::cosf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __lcpp_x) _NOEXCEPT {return ::cosl(__lcpp_x);}  #endif @@ -756,7 +753,7 @@    // cosh   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float cosh(float __lcpp_x) _NOEXCEPT {return ::coshf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __lcpp_x) _NOEXCEPT {return ::coshl(__lcpp_x);}  #endif @@ -768,7 +765,7 @@    // exp   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float exp(float __lcpp_x) _NOEXCEPT {return ::expf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __lcpp_x) _NOEXCEPT {return ::expl(__lcpp_x);}  #endif @@ -780,7 +777,7 @@    // fabs   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float fabs(float __lcpp_x) _NOEXCEPT {return ::fabsf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);}  #endif @@ -792,7 +789,7 @@    // floor   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float floor(float __lcpp_x) _NOEXCEPT {return ::floorf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __lcpp_x) _NOEXCEPT {return ::floorl(__lcpp_x);}  #endif @@ -804,7 +801,7 @@    // fmod   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float fmod(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::fmodf(__lcpp_x, __lcpp_y);}  inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fmodl(__lcpp_x, __lcpp_y);}  #endif @@ -827,7 +824,7 @@    // frexp   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float frexp(float __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexpf(__lcpp_x, __lcpp_e);}  inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexpl(__lcpp_x, __lcpp_e);}  #endif @@ -839,7 +836,7 @@    // ldexp   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float ldexp(float __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexpf(__lcpp_x, __lcpp_e);}  inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexpl(__lcpp_x, __lcpp_e);}  #endif @@ -851,7 +848,7 @@    // log   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float log(float __lcpp_x) _NOEXCEPT {return ::logf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double log(long double __lcpp_x) _NOEXCEPT {return ::logl(__lcpp_x);}  #endif @@ -863,7 +860,7 @@    // log10   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float log10(float __lcpp_x) _NOEXCEPT {return ::log10f(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __lcpp_x) _NOEXCEPT {return ::log10l(__lcpp_x);}  #endif @@ -875,14 +872,14 @@    // modf   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float modf(float __lcpp_x, float* __lcpp_y) _NOEXCEPT {return ::modff(__lcpp_x, __lcpp_y);}  inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __lcpp_x, long double* __lcpp_y) _NOEXCEPT {return ::modfl(__lcpp_x, __lcpp_y);}  #endif    // pow   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float pow(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::powf(__lcpp_x, __lcpp_y);}  inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::powl(__lcpp_x, __lcpp_y);}  #endif @@ -905,7 +902,7 @@    // sin   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float sin(float __lcpp_x) _NOEXCEPT {return ::sinf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __lcpp_x) _NOEXCEPT {return ::sinl(__lcpp_x);}  #endif @@ -917,7 +914,7 @@    // sinh   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float sinh(float __lcpp_x) _NOEXCEPT {return ::sinhf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __lcpp_x) _NOEXCEPT {return ::sinhl(__lcpp_x);}  #endif @@ -929,7 +926,7 @@    // sqrt   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __lcpp_x) _NOEXCEPT {return ::sqrtf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __lcpp_x) _NOEXCEPT {return ::sqrtl(__lcpp_x);}  #endif @@ -941,7 +938,7 @@    // tan   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float tan(float __lcpp_x) _NOEXCEPT {return ::tanf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __lcpp_x) _NOEXCEPT {return ::tanl(__lcpp_x);}  #endif @@ -953,7 +950,7 @@    // tanh   -#if !((defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14) || defined(_AIX) || defined(__sun__)) +#if !(defined(_AIX) || defined(__sun__))  inline _LIBCPP_INLINE_VISIBILITY float tanh(float __lcpp_x) _NOEXCEPT {return ::tanhf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __lcpp_x) _NOEXCEPT {return ::tanhl(__lcpp_x);}  #endif @@ -965,7 +962,6 @@    // acosh   -#if !(defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14)  inline _LIBCPP_INLINE_VISIBILITY float acosh(float __lcpp_x) _NOEXCEPT {return ::acoshf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __lcpp_x) _NOEXCEPT {return ::acoshl(__lcpp_x);}   @@ -973,11 +969,9 @@  inline _LIBCPP_INLINE_VISIBILITY  typename std::enable_if<std::is_integral<_A1>::value, double>::type  acosh(_A1 __lcpp_x) _NOEXCEPT {return ::acosh((double)__lcpp_x);} -#endif    // asinh   -#if !(defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14)  inline _LIBCPP_INLINE_VISIBILITY float asinh(float __lcpp_x) _NOEXCEPT {return ::asinhf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __lcpp_x) _NOEXCEPT {return ::asinhl(__lcpp_x);}   @@ -985,11 +979,9 @@  inline _LIBCPP_INLINE_VISIBILITY  typename std::enable_if<std::is_integral<_A1>::value, double>::type  asinh(_A1 __lcpp_x) _NOEXCEPT {return ::asinh((double)__lcpp_x);} -#endif    // atanh   -#if !(defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14)  inline _LIBCPP_INLINE_VISIBILITY float atanh(float __lcpp_x) _NOEXCEPT {return ::atanhf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __lcpp_x) _NOEXCEPT {return ::atanhl(__lcpp_x);}   @@ -997,11 +989,9 @@  inline _LIBCPP_INLINE_VISIBILITY  typename std::enable_if<std::is_integral<_A1>::value, double>::type  atanh(_A1 __lcpp_x) _NOEXCEPT {return ::atanh((double)__lcpp_x);} -#endif    // cbrt   -#if !(defined(_LIBCPP_MSVCRT) && (_VC_CRT_MAJOR_VERSION-0) < 14)  inline _LIBCPP_INLINE_VISIBILITY float cbrt(float __lcpp_x) _NOEXCEPT {return ::cbrtf(__lcpp_x);}  inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __lcpp_x) _NOEXCEPT {return ::cbrtl(__lcpp_x);}   @@ -1009,11 +999,9 @@  inline _LIBCPP_INLINE_VISIBILITY  typename std::enable_if<std::is_integral<_A1>::value, double>::type  cbrt(_A1 __lcpp_x) _NOEXCEPT {return ::cbrt((double)__lcpp_x);} -#endif    // copysign   -#if !defined(_VC_CRT_MAJOR_VERSION) || (_VC_CRT_MAJOR_VERSION < 12)  inline _LIBCPP_INLINE_VISIBILITY float copysign(float __lcpp_x,  float __lcpp_y) _NOEXCEPT {  return ::copysignf(__lcpp_x, __lcpp_y); @@ -1022,7 +1010,6 @@  copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {  return ::copysignl(__lcpp_x, __lcpp_y);  } -#endif    template <class _A1, class _A2>  inline _LIBCPP_INLINE_VISIBILITY @@ -1040,8 +1027,6 @@  return ::copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y);  }   -#if !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14)) -  // erf    inline _LIBCPP_INLINE_VISIBILITY float erf(float __lcpp_x) _NOEXCEPT {return ::erff(__lcpp_x);} @@ -1424,8 +1409,6 @@  typename std::enable_if<std::is_integral<_A1>::value, double>::type  trunc(_A1 __lcpp_x) _NOEXCEPT {return ::trunc((double)__lcpp_x);}   -#endif // !(defined(_LIBCPP_MSVCRT) && ((_VC_CRT_MAJOR_VERSION-0) < 14)) -  } // extern "C++"    #endif // __cplusplus 
diff --git a/include/support/win32/locale_win32.h b/include/support/win32/locale_win32.h index ebf5bda..2f4f90f 100644 --- a/include/support/win32/locale_win32.h +++ b/include/support/win32/locale_win32.h 
@@ -11,13 +11,6 @@  #ifndef _LIBCPP_SUPPORT_WIN32_LOCALE_WIN32_H  #define _LIBCPP_SUPPORT_WIN32_LOCALE_WIN32_H   -#include <crtversion.h> - -#if _VC_CRT_MAJOR_VERSION < 14 -// ctype mask table defined in msvcrt.dll -extern "C" unsigned short __declspec(dllimport) _ctype[]; -#endif -  #include "support/win32/support.h"  #include "support/win32/locale_mgmt_win32.h"  #include <stdio.h> 
diff --git a/include/support/win32/support.h b/include/support/win32/support.h index f961344..e48b08d 100644 --- a/include/support/win32/support.h +++ b/include/support/win32/support.h 
@@ -21,9 +21,6 @@  #if defined(_LIBCPP_COMPILER_MSVC)  #include <intrin.h>  #endif -#if defined(_LIBCPP_MSVCRT) -#include <crtversion.h> -#endif  #define swprintf _snwprintf  #define vswprintf _vsnwprintf   @@ -44,11 +41,6 @@  }  #endif // __MINGW32__   -#if defined(_VC_CRT_MAJOR_VERSION) && _VC_CRT_MAJOR_VERSION < 14 -#define snprintf _snprintf -#define _Exit _exit -#endif -  #if defined(_LIBCPP_COMPILER_MSVC)    // Bit builtin's make these assumptions when calling _BitScanForward/Reverse